// const obj = {
//   life: ['吃饭', '睡觉'],
//   doing: ['to-work', 'off-work', 'go-home', 'sleep']
// };

// 首先尝试使用 for of 进行遍历
// for(let item of obj) {// obj is not iterable
//   console.log(item);
// }
// 因为普通对象是没有 iterable 接口的，可以理解为一种规范

// 尝试实现下
// const obj = {
//   life: ['吃饭', '睡觉'],
//   doing: ['to-work', 'off-work', 'go-home', 'sleep'],
//   [Symbol.iterator]: function() {
//     let index = 0;
//     const result = [...this.life, ...this.doing];
//     return {
//       next: function() {
//         return {
//           value: result[index],
//           done: index++ >= result.length
//         }
//       }
//     }
//   }
// };
// for(const item of obj) {
//   console.log(item);
// }

// 试试看 generator 函数
function * person() {
  // console.log(123);
  // return '你好！世界！';
  console.log(111);
  yield function() { console.log(100) };
  console.log(2222);
  yield 200;
}

const personFun = person();
// console.log(personFun.next());
// console.log(personFun.next());
// console.log(personFun.next());

// for(let item of personFun) {
//   console.log(item);
// }

// 使用 generator 优化下
const obj = {
  life: ['吃饭', '睡觉'],
  doing: ['to-work', 'off-work', 'go-home', 'sleep'],
  [Symbol.iterator]: function * () {
    let index = 0;
    const result = [...this.life, ...this.doing];
    while(index < result.length) {
      yield result[index];
      index++;
    }
  }
};
for(const item of obj) {
  console.log(item);
}